home *** CD-ROM | disk | FTP | other *** search
/ Light ROM 1 / LIGHT-ROM 1 (Amiga Library Services)(1994).iso / ffdisks / d931.lha / Modules / GamePortDevice / GamePortDevice.def / GamePortDevice.def
Text File  |  1993-12-20  |  7KB  |  162 lines

  1. DEFINITION MODULE GamePortDevice;
  2.  
  3. (* Version 1.0                                                          *)
  4. (* Diese Routinen helfen dem Programmierer auf einfachste Weise die     *)
  5. (* GamePorts nach verschiedenen Geräten, wie z.B. Joystick, relativen   *)
  6. (* Joystick und Maus, abzufragen.                                       *)
  7. (* Die Files GamePortDevice.obj und GamePortDevice.sym sind Copyright-  *)
  8. (* frei. Sie dürfen auch in kommerziellen Produkten benutzt werden.     *)
  9. (* Diese Files dürfen allerdings nur mit den Sourcecodes und dem Demo   *)
  10. (* weitergegeben werden.                                                *)
  11. (* Jeder Art Änderungen am Sourcecode oder am Definitionsfile ohne      *)
  12. (* meine ausdrückliche Genehmigung sind verboten. Das Definitionsfile   *)
  13. (* und der Sourcecode, sowie Teile daraus, sind Copyrightgeschützt!     *)
  14. (*                      © 1991 by Andre Wiethoff                        *)
  15. (*                                                                      *)
  16. (* Bei Verbesserungsvorschlägen, Fehlern oder bei Fragen:               *)
  17. (* Andre Wiethoff                                                       *)
  18. (* Höhenweg 2                                                           *)
  19. (* D-57392 Schmallenberg / Germany                                      *)
  20.  
  21.  
  22.  
  23. FROM ExecD      IMPORT MsgPort,IOStdReq;
  24. FROM InputEvent IMPORT lButton,rButton,mButton,upPrefix;
  25. FROM GamePort    IMPORT GamePortTrigger,Controller;
  26.  
  27.  
  28.  
  29. CONST
  30.  
  31. (* Die folgenden Konstanten können bei der Auswertung der Events        *)
  32. (* aus 'ReadEvent' benutzt werden, um zu ermitteln welche Tasten des    *)
  33. (* Eingabegeräts gedrückt bzw. losgelassen wurden.                      *)
  34.  
  35.   lButtonDown  = lButton;
  36.   lButtonUp    = lButton+upPrefix;
  37.   rButtonDown  = rButton;
  38.   rButtonUp    = rButton+upPrefix;
  39.   mButtonDown  = mButton;
  40.   mButtonUp    = mButton+upPrefix;
  41.   noButton     = 0FFH;              (* Siehe InputEvent *)
  42.  
  43.  
  44. (* Die Konstanten 'portA' und 'portB' können bei 'OpenGamePort' dazu   *)
  45. (* benutzt werden, den gewünschten GamePort anzugeben.                 *)
  46.  
  47.   portA        = 1;
  48.   portB        = 2;
  49.  
  50.  
  51.  
  52. TYPE GamePortHandlePtr = POINTER TO GamePortHandle;
  53.      GamePortHandle = RECORD
  54.        msgPort     : MsgPort;
  55.        ioGamePort  : IOStdReq;
  56.        controller  : Controller;
  57.      END;
  58.  
  59.  
  60.  
  61. (* 'OpenGamePort' öffnet das GamePortDevice für einen angegebenen Port *)
  62. (* der in 'port' angegeben werden muß. Wenn ein Programm mehrere Ports *)
  63. (* belegen möchte muß es das Device mehrere Male mit jeweils dem Port  *)
  64. (* öffnen. Der Port A ist allerdings vom InputDevice belegt, um die    *)
  65. (* Mausbewegungen auszulesen. Erst wenn das InputDevice ausgeschaltet  *)
  66. (* wird, kann auch auf den Port A zugegriffen werden.                  *)
  67. (* Es wird ein Zeiger auf die 'GamePortHandle'-Struktur zurückgegeben, *)
  68. (* die bei den folgenden Befehlen mit übergeben werden muß.            *)
  69.  
  70. PROCEDURE OpenGamePort(port : LONGINT) : GamePortHandlePtr;
  71.  
  72.  
  73.  
  74. (* 'ResetGamePort' löscht alle noch im Buffer befindlichen Events für  *)
  75. (* den jeweiligen Port.                                                *)
  76.  
  77. PROCEDURE ResetGamePort(gp : GamePortHandlePtr);
  78.  
  79.  
  80.  
  81. (* 'SetControllerType' legt fest, welche Art von Eingabegerät an dem   *)
  82. (* jeweiligen Port angeschlossen ist. 'Controller' kann aus dem Modul  *)
  83. (* GamePort importiert werden und die Flags 'noController', 'mouse',   *)
  84. (* 'absJoystick' und 'relJoystick' annehmen. Ein relativer Joystick    *)
  85. (* kann außer einer einfachen Richtungsangabe auch noch die Auslenkung *)
  86. (* in die jeweilige Richtung bestimmen. Dazu wird allerdings ein       *)
  87. (* spezieller Joystick benötigt! Wenn kein Fehler auftretet gibt       *)
  88. (* die Routine ein TRUE zurück, wenn aber der neue Controller nicht    *)
  89. (* gesetzt werden konnte, ein FALSE.                                   *)
  90.  
  91. PROCEDURE SetControllerType(gp : GamePortHandlePtr;
  92.                             c  : Controller) : BOOLEAN;
  93.  
  94.  
  95.  
  96. (* 'GetControllerType' stellt das Gegenstück zu 'SetControllerType'    *)
  97. (* dar. Man bekommt in der Variablen 'c' den aktuellen Controller      *)
  98. (* an dem jeweiligen Port übergeben, wenn der Port von dem eigenen     *)
  99. (* Programm belegt wurde. Wenn der Port schon von einem fremden        *)
  100. (* Programm belegt ist, wird ein FALSE zurückgegeben, ansonsten ein    *)
  101. (* TRUE. Aber selbst wenn ein TRUE zurückgegeben wird muß noch geprüft *)
  102. (* werden, ob 'c' gleich 'noController' ist. Mit dieser Funktion kann  *)
  103. (* man gut und einfach bestimmen, ob der jeweilige Port schon belegt   *)
  104. (* ist.                                                                *)
  105.  
  106. PROCEDURE GetControllerType(    gp : GamePortHandlePtr;
  107.                             VAR c  : Controller) : BOOLEAN;
  108.  
  109.  
  110.  
  111. (* 'SetTrigger' übergibt dem Device einige Informationen, wie es auf   *)
  112. (* die Bewegungen reagieren soll. In der Struktur 'GamePortTrigger'    *)
  113. (* aus dem Modul GamePort müssen verschiedene Werte eingetragen werden:*)
  114. (* 'keys'    : hier muß vermerkt werden ob ein Event gewünscht wird,   *)
  115. (*             wenn ein Knopf gedrückt bzw. losgelassen wurde.         *)
  116. (* 'timeout' : gibt an in 1/50 Sekunden, nach welcher Zeit ein Event   *)
  117. (*             verschickt wird, wenn keine Änderung des Zustandes      *)
  118. (*             eingetreten ist.                                        *)
  119. (* 'xDelta'  : Gibt an nach wievielen Registrationen von Bewegungen    *)
  120. (*             in X-Richtung eine Bewegung um 1 Pixel gesendet werden  *)
  121. (*             soll. Dieses sollte für den absJoystick auf 1 gesetzt   *)
  122. (*             werden, da ansonsten bei Bewegungen keine Events mehr   *)
  123. (*             gesendet werden, sondern nur nach dem 'timeout' in      *)
  124. (*             Erfahrung gebracht werden kann, ob der Joystick bewegt  *)
  125. (*             wurde. Bei den anderen Eingabegeräten kann man damit    *)
  126. (*             die Geschwindigkeit regulieren. Je höher der Wert,      *)
  127. (*             desto weniger Pixel wird die Auswertung ausgeben.       *)
  128. (* 'yDelta'  : Es gilt das gleiche wie für 'xDelta', nur in Y-Richtung.*)
  129.  
  130. PROCEDURE SetTrigger(gp  : GamePortHandlePtr;
  131.              gpt : GamePortTrigger);
  132.  
  133.  
  134.  
  135. (* 'GetTrigger' besorgt sich die aktuellen 'GamePortTrigger'-Daten,    *)
  136. (* wie bei 'SetTrigger' erläutert.                                     *)
  137.  
  138. PROCEDURE GetTrigger(    gp  : GamePortHandlePtr;
  139.              VAR gpt : GamePortTrigger);
  140.  
  141.  
  142.  
  143. (* 'ReadEvent' liest ein Event aus dem Buffer und gibt die benötigten  *)
  144. (* Werte zurück. Die relative Bewegung zum letzten Aufruf wird in      *)
  145. (* 'x' und 'y' gespeichert und die Knopfaktivitäten in 'button'.       *)
  146. (* Die Werte die 'button' annehmen kann, sind im Konstantenteil        *)
  147. (* deklariert.                                                         *)
  148.  
  149. PROCEDURE ReadEvent(    gp     : GamePortHandlePtr;
  150.                     VAR x,y    : INTEGER;
  151.                     VAR button : CARDINAL);
  152.  
  153.  
  154.  
  155. (* 'CloseGamePort' gibt den Port wieder frei und schließt das Device.  *)
  156. (* Dieser Befehl wird auch automatisch am Programmende aufgerufen.     *)
  157.  
  158. PROCEDURE CloseGamePort(VAR gp : GamePortHandlePtr);
  159.  
  160.  
  161. END GamePortDevice.
  162.